#ifndef _cesium_sampler_hpp_
#define _cesium_sampler_hpp_

#include "buffer.hpp"

namespace Cesium {

/** The Sampler concept draws samples from a stream of data.  The sampler
 *  itself simply indicates to the user whether or not to keep each sampler.
 *  The core functionality is in the sample() method.
 */
class Sampler {
    /** Should be copyable. */
    Sampler(const Sampler& cpy);

    /** Decide whether or not to drop this sample.  The sampling process is
     *  given access to the data in case it is necessary, but the method doesn't
     *  have to use the data.
     *  \returns true if the sample should be used, false if it should be dropped
     */
    bool sample(Buffer* data, BufferRange range);
}; // class Sampler

} // namespace Cesium

#endif //_cesium_sampler_hpp_
